//package com.dd.cloud.user.util;
//
///**
// * @Description: app发送消息测试类
// * @Author: czg
// * @Date: 2023/9/13 17:13
// * @Version: 1.0.0
// */
//
//import com.alibaba.fastjson.JSONObject;
//import com.dd.cloud.user.config.GeTuiConfig;
//import com.dd.cloud.user.req.news.AppNewsSendReq;
//import com.gexin.rp.sdk.base.IPushResult;
//import com.gexin.rp.sdk.base.impl.*;
//import com.gexin.rp.sdk.base.notify.Notify;
//import com.gexin.rp.sdk.base.payload.APNPayload;
//import com.gexin.rp.sdk.dto.GtReq;
//import com.gexin.rp.sdk.http.IGtPush;
//import com.gexin.rp.sdk.template.TransmissionTemplate;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
///**
// * @author
// * @date 2021/4/1 10:47
// */
//@Component
//@Slf4j
//public class SensorPush {
//    @Autowired
//    private GeTuiConfig geTuiConfig;
//    private final String packageName = "uni.UNID46A890";
//    private TbPlan tbPlan = new TbPlan();
//
//    public Map<String, Object> pushMsg(AppNewsSendReq req){
//        if (StringUtils.isBlank(req.getCid()) && (req.getCidList() == null || req.getCidList().isEmpty())){
//            return pushAll(req);
//        }
//        if (StringUtils.isNotBlank(req.getCid())){
//            return pushByCid(req);
//        }
//        if (req.getCidList() != null && !req.getCidList().isEmpty()){
//            return pushList(req);
//        }
//        log.info("参数有误, 未发送消息,{}",  req.toString());
//        return null;
//    }
//
//
//    /**
//     * 善禾传感器触发推送手机状态栏通知
//     *
//     * @param:  clientInfos:发送人群
//     *          message:推送的消息
//     *          tbPlan:设备所在房间
//     *          deviceName:设备名称
//     *
//     * @return  contentId:消息唯一ID
//     *          pushType:推送的类型，toSingle为单推，toList为批量推，toApp为给全部用户推送
//     *          expireTime:消息到期时间
//     */
//    public Map<String, Object> pushByCid(AppNewsSendReq req) {
//        IGtPush push = new IGtPush(geTuiConfig.getUrl(), geTuiConfig.getAppKey(), geTuiConfig.getMasterSecret());
//        //2、获取模板
//        TransmissionTemplate template = getTemplate(tbPlan, getAPNPayload(tbPlan, req.getContent()), req);
//        //3、创建消息
//        SingleMessage message = (SingleMessage) getMessage(template);
//        List<String> cidList = new ArrayList<>();
//        cidList.add(req.getCid());
//        //4、筛选发送人群
//        List<Target> targets = getTargets(cidList);
////        IPushResult iPushResult = push.pushMessageToList(contentId, targets);
//        AppMessage appMessage = getAppMessage(template);
//        List<String> appidList = new ArrayList<>();
//        appidList.add(geTuiConfig.getAppId());
//        appMessage.setAppIdList(appidList);
//        IPushResult iPushResult = push.pushMessageToSingle(message, targets.get(0));
//
//        String resultStr = iPushResult.getResponse().toString();
//        System.out.println(resultStr);
//        Map<String, Object> resultMap = new HashMap<>();
//        resultMap.put("pushType", "single");
//        resultMap.put("expireTime", message.getOfflineExpireTime());
//        resultMap.put("result",resultStr);
//        return resultMap;
//    }
//
//    /**
//     * 善禾传感器触发推送手机状态栏通知
//     *
//     * @param:  clientInfos:发送人群
//     *          message:推送的消息
//     *          tbPlan:设备所在房间
//     *          deviceName:设备名称
//     *
//     * @return  contentId:消息唯一ID
//     *          pushType:推送的类型，toSingle为单推，toList为批量推，toApp为给全部用户推送
//     *          expireTime:消息到期时间
//     */
//    public Map<String, Object> pushList(AppNewsSendReq req) {
//        IGtPush push = new IGtPush(geTuiConfig.getUrl(), geTuiConfig.getAppKey(), geTuiConfig.getMasterSecret());
//        //2、获取模板
//        TransmissionTemplate template = getTemplate(tbPlan, getAPNPayload(tbPlan, req.getContent()), req);
//        //3、创建消息
//        ListMessage message = (ListMessage) getMessage(template);
//        //4、筛选发送人群
//        List<Target> targets = getTargets(req.getCidList());
//        //5、发送
//        String contentId = push.getContentId(message);
//        IPushResult iPushResult = push.pushMessageToList(contentId, targets);
//
//        String resultStr = iPushResult.getResponse().toString();
//        System.out.println(resultStr);
//        Map<String, Object> resultMap = new HashMap<>();
//        resultMap.put("contentId", contentId);
//        resultMap.put("pushType", "toList");
//        resultMap.put("expireTime", message.getOfflineExpireTime());
//        resultMap.put("result",resultStr);
//        return resultMap;
//    }
//
//
//    /**
//     * 善禾传感器触发推送手机状态栏通知
//     *
//     * @param:  clientInfos:发送人群
//     *          message:推送的消息
//     *          tbPlan:设备所在房间
//     *          deviceName:设备名称
//     *
//     * @return  contentId:消息唯一ID
//     *          pushType:推送的类型，toSingle为单推，toList为批量推，toApp为给全部用户推送
//     *          expireTime:消息到期时间
//     */
//    public Map<String, Object> pushAll(AppNewsSendReq req) {
//        IGtPush push = new IGtPush(geTuiConfig.getUrl(), geTuiConfig.getAppKey(), geTuiConfig.getMasterSecret());
//        //2、获取模板
//        TransmissionTemplate template = getTemplate(tbPlan, getAPNPayload(tbPlan, req.getContent()), req);
//        AppMessage appMessage = (AppMessage) getMessage(template);
//        List<String> appidList = new ArrayList<>();
//        appidList.add(geTuiConfig.getAppId());
//        appMessage.setAppIdList(appidList);
//        IPushResult iPushResult = push.pushMessageToApp(appMessage);
//        String resultStr = iPushResult.getResponse().toString();
//        System.out.println(resultStr);
//        Map<String, Object> resultMap = new HashMap<>();
//        resultMap.put("pushType", "all");
//        resultMap.put("expireTime", appMessage.getOfflineExpireTime());
//        resultMap.put("result",resultStr);
//        return resultMap;
//    }
//
//    /**
//     *
//     * @param clientInfos 发送人群
//     * @return  Target列表
//     */
//    public List<Target> getTargets(List<String> clientInfos){
//        List<Target> targets = new ArrayList<>();
//        for (String client : clientInfos) {
//            Target target = new Target();
//            target.setAppId(geTuiConfig.getAppId());
//            target.setClientId(client);
//            targets.add(target);
//        }
//        return targets;
//    }
//
//    /**
//     * 创建消息
//     *
//     * @param template 透传模板
//     * @return  消息
//     */
//    public Message getMessage(TransmissionTemplate template){
//        Message message = new Message();
//        message.setData(template);
//        message.setOffline(true);//消息是否离线
//        message.setOfflineExpireTime(3600000 * 24);//消息到期时间一天
//        return message;
//    }
//
//
//    /**
//     * 创建消息 发送所有人的message
//     *
//     * @param template 透传模板
//     * @return  消息
//     */
//    public AppMessage getAppMessage(TransmissionTemplate template){
//        AppMessage message = new AppMessage();
//        message.setData(template);
//        message.setOffline(true);//消息是否离线
//        message.setOfflineExpireTime(3600000 * 24);//消息到期时间一天
//        return message;
//    }
//
//    /**
//     * 创建消息 发送单人的message
//     *
//     * @param template 透传模板
//     * @return  消息
//     */
//    public SingleMessage getSingleMessage(TransmissionTemplate template){
//        SingleMessage message = new SingleMessage();
//        message.setData(template);
//        message.setOffline(true);//消息是否离线
//        message.setOfflineExpireTime(3600000 * 24);//消息到期时间一天
//        return message;
//    }
//
//    /**
//     * 创建模板
//     *
//     * @param tbPlan    房间信息
//     * @param req   消息主体内容
//     * @param payload   ios离线通知
//     * @return 透传模板
//     */
//    public TransmissionTemplate getTemplate(TbPlan tbPlan, APNPayload payload, AppNewsSendReq req) {
//        TransmissionTemplate template = new TransmissionTemplate();
//        template.setAppkey(geTuiConfig.getAppKey());
//        template.setAppId(geTuiConfig.getAppId());
//        template.setTransmissionType(2);
//
//        Map<String, Object> payloadMap = new HashMap<>();
//        Map<String, Object> contentMap = new HashMap<>();
//
//        if (tbPlan == null) {
//            payloadMap.put("id", "0");
//        } else {
//            payloadMap.put("id", tbPlan.getIdx());
//            payloadMap.put("houseName", tbPlan.getName());
//            payloadMap.put("planId", tbPlan.getId());
//        }
//
//        contentMap.put("title", req.getTitle());
//        contentMap.put("content", req.getContent());
//        contentMap.put("payload", payloadMap);
//        JSONObject contentStr = new JSONObject(contentMap);
//
//        template.setTransmissionContent(contentStr.toString());
//        template.setAPNInfo(payload);
//
//        Notify notify = new Notify();
//        notify.setTitle(req.getTitle());
//        notify.setContent(req.getContent());
//
//        String payloadStr = new JSONObject(payloadMap).toString();
//
//        notify.setPayload(payloadStr);
//        notify.setType(GtReq.NotifyInfo.Type._intent);
//
//        String intent = "intent:#Intent;action=android.intent.action.oppopush;launchFlags=0x14000000;component=" + packageName + "/io.dcloud.PandoraEntry;" +
//                "S.UP-OL-SU=true;S.title=大道中医;S.content=" + req.getContent() + ";S.payload=" + payloadStr + ";end";
//
//        notify.setIntent(intent);
//        template.set3rdNotifyInfo(notify);
//
//        return template;
//    }
//
//    /**
//     * 创建ios离线APN通知
//     *
//     * @param tbPlan    房间信息
//     * @param content   消息主体内容
//     * @return  APNPayload
//     */
//    public APNPayload getAPNPayload(TbPlan tbPlan, String content) {
//        APNPayload payload = new APNPayload();
//        if (tbPlan == null) {
//            payload.addCustomMsg("id", "0");
//        } else {
//            payload.addCustomMsg("id", tbPlan.getIdx());
//            payload.addCustomMsg("houseName", tbPlan.getName());
//            payload.addCustomMsg("planId", tbPlan.getId());
//        }
//        payload.setContentAvailable(0);
//        payload.setSound("default");
//        payload.setAutoBadge("0");
//
//        payload.setAlertMsg(getAlertMsg(content));
//
//        return payload;
//    }
//
//    public APNPayload.DictionaryAlertMsg getAlertMsg(String content) {
//        APNPayload.DictionaryAlertMsg alertMsg = new APNPayload.DictionaryAlertMsg();
//        alertMsg.setTitle("");
//        alertMsg.setBody(content);
//        return alertMsg;
//    }
//}
//
